home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / distutils / command / bdist_wininst.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  9KB  |  238 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. """distutils.command.bdist_wininst
  5.  
  6. Implements the Distutils 'bdist_wininst' command: create a windows installer
  7. exe-program."""
  8. __revision__ = '$Id: bdist_wininst.py,v 1.56 2004/11/10 22:23:14 loewis Exp $'
  9. import sys
  10. import os
  11. import string
  12. from distutils.core import Command
  13. from distutils.util import get_platform
  14. from distutils.dir_util import create_tree, remove_tree
  15. from distutils.errors import *
  16. from distutils.sysconfig import get_python_version
  17. from distutils import log
  18.  
  19. class bdist_wininst(Command):
  20.     description = 'create an executable installer for MS Windows'
  21.     user_options = [
  22.         ('bdist-dir=', None, 'temporary directory for creating the distribution'),
  23.         ('keep-temp', 'k', 'keep the pseudo-installation tree around after ' + 'creating the distribution archive'),
  24.         ('target-version=', None, 'require a specific python version' + ' on the target system'),
  25.         ('no-target-compile', 'c', 'do not compile .py to .pyc on the target system'),
  26.         ('no-target-optimize', 'o', 'do not compile .py to .pyo (optimized)on the target system'),
  27.         ('dist-dir=', 'd', 'directory to put final built distributions in'),
  28.         ('bitmap=', 'b', 'bitmap to use for the installer instead of python-powered logo'),
  29.         ('title=', 't', 'title to display on the installer background instead of default'),
  30.         ('skip-build', None, 'skip rebuilding everything (for testing/debugging)'),
  31.         ('install-script=', None, 'basename of installation script to be run afterinstallation or before deinstallation'),
  32.         ('pre-install-script=', None, 'Fully qualified filename of a script to be run before any files are installed.  This script need not be in the distribution')]
  33.     boolean_options = [
  34.         'keep-temp',
  35.         'no-target-compile',
  36.         'no-target-optimize',
  37.         'skip-build']
  38.     
  39.     def initialize_options(self):
  40.         self.bdist_dir = None
  41.         self.keep_temp = 0
  42.         self.no_target_compile = 0
  43.         self.no_target_optimize = 0
  44.         self.target_version = None
  45.         self.dist_dir = None
  46.         self.bitmap = None
  47.         self.title = None
  48.         self.skip_build = 0
  49.         self.install_script = None
  50.         self.pre_install_script = None
  51.  
  52.     
  53.     def finalize_options(self):
  54.         if self.bdist_dir is None:
  55.             bdist_base = self.get_finalized_command('bdist').bdist_base
  56.             self.bdist_dir = os.path.join(bdist_base, 'wininst')
  57.         
  58.         if not self.target_version:
  59.             self.target_version = ''
  60.         
  61.         if not (self.skip_build) and self.distribution.has_ext_modules():
  62.             short_version = get_python_version()
  63.             if self.target_version and self.target_version != short_version:
  64.                 raise DistutilsOptionError, "target version can only be %s, or the '--skip_build' option must be specified" % (short_version,)
  65.             
  66.             self.target_version = short_version
  67.         
  68.         self.set_undefined_options('bdist', ('dist_dir', 'dist_dir'))
  69.         if self.install_script:
  70.             for script in self.distribution.scripts:
  71.                 if self.install_script == os.path.basename(script):
  72.                     break
  73.                     continue
  74.             else:
  75.                 raise DistutilsOptionError, "install_script '%s' not found in scripts" % self.install_script
  76.         
  77.  
  78.     
  79.     def run(self):
  80.         if sys.platform != 'win32':
  81.             if self.distribution.has_ext_modules() or self.distribution.has_c_libraries():
  82.                 raise DistutilsPlatformError('distribution contains extensions and/or C libraries; must be compiled on a Windows 32 platform')
  83.             
  84.         if not self.skip_build:
  85.             self.run_command('build')
  86.         
  87.         install = self.reinitialize_command('install', reinit_subcommands = 1)
  88.         install.root = self.bdist_dir
  89.         install.skip_build = self.skip_build
  90.         install.warn_dir = 0
  91.         install_lib = self.reinitialize_command('install_lib')
  92.         install_lib.compile = 0
  93.         install_lib.optimize = 0
  94.         if self.distribution.has_ext_modules():
  95.             target_version = self.target_version
  96.             if not target_version:
  97.                 target_version = sys.version[0:3]
  98.             
  99.             plat_specifier = '.%s-%s' % (get_platform(), target_version)
  100.             build = self.get_finalized_command('build')
  101.             build.build_lib = os.path.join(build.build_base, 'lib' + plat_specifier)
  102.         
  103.         for key in ('purelib', 'platlib', 'headers', 'scripts', 'data'):
  104.             value = string.upper(key)
  105.             if key == 'headers':
  106.                 value = value + '/Include/$dist_name'
  107.             
  108.             setattr(install, 'install_' + key, value)
  109.         
  110.         log.info('installing to %s', self.bdist_dir)
  111.         install.ensure_finalized()
  112.         sys.path.insert(0, os.path.join(self.bdist_dir, 'PURELIB'))
  113.         install.run()
  114.         del sys.path[0]
  115.         mktemp = mktemp
  116.         import tempfile
  117.         archive_basename = mktemp()
  118.         fullname = self.distribution.get_fullname()
  119.         arcname = self.make_archive(archive_basename, 'zip', root_dir = self.bdist_dir)
  120.         self.create_exe(arcname, fullname, self.bitmap)
  121.         log.debug("removing temporary file '%s'", arcname)
  122.         os.remove(arcname)
  123.         if not self.keep_temp:
  124.             remove_tree(self.bdist_dir, dry_run = self.dry_run)
  125.         
  126.  
  127.     
  128.     def get_inidata(self):
  129.         lines = []
  130.         metadata = self.distribution.metadata
  131.         lines.append('[metadata]')
  132.         if not metadata.long_description:
  133.             pass
  134.         info = '' + '\n'
  135.         
  136.         def escape(s):
  137.             return string.replace(s, '\n', '\\n')
  138.  
  139.         for name in [
  140.             'author',
  141.             'author_email',
  142.             'description',
  143.             'maintainer',
  144.             'maintainer_email',
  145.             'name',
  146.             'url',
  147.             'version']:
  148.             data = getattr(metadata, name, '')
  149.             if data:
  150.                 info = info + '\n    %s: %s' % (string.capitalize(name), escape(data))
  151.                 lines.append('%s=%s' % (name, escape(data)))
  152.                 continue
  153.         
  154.         lines.append('\n[Setup]')
  155.         if self.install_script:
  156.             lines.append('install_script=%s' % self.install_script)
  157.         
  158.         lines.append('info=%s' % escape(info))
  159.         lines.append('target_compile=%d' % (not (self.no_target_compile)))
  160.         lines.append('target_optimize=%d' % (not (self.no_target_optimize)))
  161.         if self.target_version:
  162.             lines.append('target_version=%s' % self.target_version)
  163.         
  164.         if not self.title:
  165.             pass
  166.         title = self.distribution.get_fullname()
  167.         lines.append('title=%s' % escape(title))
  168.         import time as time
  169.         import distutils as distutils
  170.         build_info = 'Built %s with distutils-%s' % (time.ctime(time.time()), distutils.__version__)
  171.         lines.append('build_info=%s' % build_info)
  172.         return string.join(lines, '\n')
  173.  
  174.     
  175.     def create_exe(self, arcname, fullname, bitmap = None):
  176.         import struct as struct
  177.         self.mkpath(self.dist_dir)
  178.         cfgdata = self.get_inidata()
  179.         installer_name = self.get_installer_filename(fullname)
  180.         self.announce('creating %s' % installer_name)
  181.         if bitmap:
  182.             bitmapdata = open(bitmap, 'rb').read()
  183.             bitmaplen = len(bitmapdata)
  184.         else:
  185.             bitmaplen = 0
  186.         file = open(installer_name, 'wb')
  187.         file.write(self.get_exe_bytes())
  188.         if bitmap:
  189.             file.write(bitmapdata)
  190.         
  191.         
  192.         try:
  193.             unicode
  194.         except NameError:
  195.             pass
  196.  
  197.         if isinstance(cfgdata, unicode):
  198.             cfgdata = cfgdata.encode('mbcs')
  199.         
  200.         cfgdata = cfgdata + '\x00'
  201.         if self.pre_install_script:
  202.             script_data = open(self.pre_install_script, 'r').read()
  203.             cfgdata = cfgdata + script_data + '\n\x00'
  204.         else:
  205.             cfgdata = cfgdata + '\x00'
  206.         file.write(cfgdata)
  207.         header = struct.pack('<iii', 305419899, len(cfgdata), bitmaplen)
  208.         file.write(header)
  209.         file.write(open(arcname, 'rb').read())
  210.  
  211.     
  212.     def get_installer_filename(self, fullname):
  213.         if self.target_version:
  214.             installer_name = os.path.join(self.dist_dir, '%s.win32-py%s.exe' % (fullname, self.target_version))
  215.         else:
  216.             installer_name = os.path.join(self.dist_dir, '%s.win32.exe' % fullname)
  217.         return installer_name
  218.  
  219.     
  220.     def get_exe_bytes(self):
  221.         get_build_version = get_build_version
  222.         import distutils.msvccompiler
  223.         cur_version = get_python_version()
  224.         if self.target_version and self.target_version != cur_version:
  225.             if self.target_version > cur_version:
  226.                 bv = get_build_version()
  227.             elif self.target_version < '2.4':
  228.                 bv = '6'
  229.             else:
  230.                 bv = '7.1'
  231.         else:
  232.             bv = get_build_version()
  233.         directory = os.path.dirname(__file__)
  234.         filename = os.path.join(directory, 'wininst-%s.exe' % bv)
  235.         return open(filename, 'rb').read()
  236.  
  237.  
  238.